/*******************************************
  Jose Andres Lara Vecino

  Author       : $Author: cainlara@gmail.com $
  Last CheckIn : $Date: 2012-08-22 18:35:06 +0000 (Wed, 22 Aug 2012) $
  Revision     : $Revision: 100 $
*******************************************/

package gui.proyecto;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.table.TableCellRenderer;

import utilidad.IPropiedades;
import api.IProyectoAPI;
import control.App;
import frente.Proyecto;
import generico.GenericoLlaveNombre;
import generico.GenericoTablaListado;
import gui.dialogo.DialogoMensaje;

/**
 * Tabla de proyectos.
 * <P>
 * Este componente <code>gui</code> es el 
 * que se muestra en el listado principal 
 * de los proyectos.
 * 
 * @see ProyectosTablaModelo
 * 
 * @author jose.lara 06.06.2012
 */
public class ProyectosTabla extends GenericoTablaListado {
    private static final long serialVersionUID = -2639308157705723153L;
    
    private ProyectosTablaModelo modelo             = null;
    private EditarProyectoDialogo dialogo           = null;
    private ProyectosTablaRenderizador renderizador = null;
    
    public ProyectosTabla() {
        super();
        modelo = new ProyectosTablaModelo();
        setModel(modelo);
    }
    
    @Override
    protected ProyectosTablaModelo getModelo() {
        if(modelo == null) {
            modelo = new ProyectosTablaModelo();
        }
        
        return modelo;
    }
    
    @Override
    protected void mostrarDialogoEditar(GenericoLlaveNombre objeto) {
        Proyecto proyecto = null;
        
        if(objeto instanceof Proyecto) {
            proyecto = (Proyecto)objeto;
        }
        
        getDialogo().setValoresProyecto(proyecto);
        getDialogo().setVisible(true);
    }
    
    @Override
    protected Proyecto getObjetoSeleccionado() {
        return (Proyecto)super.getObjetoSeleccionado();
    }
    
    @Override
    protected void eliminarObjetoSeleccionado() {
        IProyectoAPI proyectoAPI    = null;
        int respuesta               = DialogoMensaje.RESPUESTA_NO;
        
        respuesta = DialogoMensaje.confirmarEliminacion();
        
        if(respuesta == DialogoMensaje.RESPUESTA_SI) {
            proyectoAPI = App.getSesion().getProyectoAPI();
            proyectoAPI.eliminarProyecto(getObjetoSeleccionado());
            actualizarDatos();
        }
    }

    @Override
    public TableCellRenderer getCellRenderer(int row, int column) {
        return getRenderizador();
    }
    
    private ProyectosTablaRenderizador getRenderizador() {
        if(renderizador == null) {
            renderizador = new ProyectosTablaRenderizador();
        }
        
        return renderizador;
    }
    
    private EditarProyectoDialogo getDialogo() {
        if(dialogo == null) {
            dialogo = new EditarProyectoDialogo();
            dialogo.addPropertyChangeListener(new PropertyChangeListener() {
                @Override
                public void propertyChange(PropertyChangeEvent evt) {
                    if(evt.getPropertyName().equals(IPropiedades.ACTUALIZAR)) {
                        actualizarDatos();
                    }
                }
            });
        }
        
        return dialogo;
    }
}